/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package py.una.pol.tesis.ii.wsrest;

import com.google.gson.Gson;
import com.sun.jersey.api.view.Viewable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import py.una.informatica.core.Emergencia;
import py.una.informatica.dto.AsoDoctorDiagnostico;
import py.una.informatica.dto.Persona;
import py.una.informatica.dto.Respuesta;

/**
 * REST Web Service
 *
 * @author Leandro
 */
@Path("doctores")
@Stateless
public class DoctoresResource {

    @Context
    private UriInfo context;
    @EJB
    private Emergencia bean;

    /**
     * Creates a new instance of DoctoresResource
     */
    public DoctoresResource() {
    }

    @GET
    @Path("/index")
    @Produces("text/html")
    public Response index(@Context HttpServletRequest req) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, MenuResource.index: " + session.getId());
            
            List<String> permisos = new ArrayList<String>();
            permisos.add("P1");
            permisos.add("P2");
            permisos.add("P3");
            permisos.add("P4");
            
            map.put("permisos", permisos);
            map.put("usuario", "leandrol");
        } catch (Exception e) {
            Logger.getLogger("").info("Error al mostrar el ui pacientes: ", e);
        }

        return Response.ok(new Viewable("/doctores", map)).build();
    }

    @POST
    public String crearDoctor(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.crearDoctor: " + session.getId());

            Logger.getLogger("").info("Entrada crearDoctor: " + entrada);

            Persona doctor = gson.fromJson(entrada, Persona.class);
            Logger.getLogger("").info("Clase doctor: " + doctor.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Doctor creado correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta crearDoctor: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al crear el Doctor, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en crearDoctor", e);
        }

        return respuestaJson;
    }

    @DELETE
    @Path("{id}")
    public String deleteDoctor(@Context HttpServletRequest req, @PathParam("id") String id) {
        HttpSession session = req.getSession(true);
        Logger.getLogger("").info("Session, DoctoresResource.deleteDoctor: " + session.getId());

        return "";
    }

    @GET
    @Path("{id}")
    public String getDoctor(@Context HttpServletRequest req, @PathParam("id") String id) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        List<Object> doctores = new ArrayList<Object>();
        Persona doctor1 = null;
        Persona doctor2 = null;

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.getDoctor: " + session.getId());

            Logger.getLogger("").info("Entrada getDoctor, id: " + id);
            if (id.equals("1")) {
                doctor1 = new Persona(1, 4457533, "Leandro", "Luque", "11/07/1989",
                        "General Santos y Mencia Sanabria", "Oliva y Chile",
                        "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                        "B+", "02/06/2015", "", "M", "Pilar");
                doctores.add(doctor1);
            } else {
                doctor2 = new Persona(2, 3361242, "Cynthia", "Meza", "11/07/1989",
                        "General Santos y Mencia Sanabria", "Oliva y Chile",
                        "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                        "B+", "02/06/2015", "", "M", "Pilar");
                doctores.add(doctor2);
            }

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(doctores);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getDoctor: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al obtener el detalle del doctor.");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getDoctor", e);
        }

        return respuestaJson;
    }

    @GET
    public String getDoctores(@Context HttpServletRequest req) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        List<Object> doctores = new ArrayList<Object>();
        Persona doctor1 = null;
        Persona doctor2 = null;

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.getDoctores: " + session.getId());

            doctor1 = new Persona(1, 4457533, "Leandro", "Luque", "11/07/1989",
                    "General Santos y Mencia Sanabria", "Oliva y Chile",
                    "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                    "B+", "02/06/2015", "", "M", "Pilar");

            doctor2 = new Persona(2, 3361242, "Cynthia", "Meza", "11/07/1989",
                    "General Santos y Mencia Sanabria", "Oliva y Chile",
                    "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                    "B+", "02/06/2015", "", "M", "Pilar");

            doctores.add(doctor1);
            doctores.add(doctor2);

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(doctores);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getDoctores: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al obtener los doctores.");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getDoctores", e);
        }

        return respuestaJson;
    }

    @PUT
    public String editarDoctor(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.editarDoctor: " + session.getId());

            Logger.getLogger("").info("Entrada editarDoctor: " + entrada);

            Persona doctor = gson.fromJson(entrada, Persona.class);
            Logger.getLogger("").info("Clase doctor: " + doctor.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Doctor editado correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta editarDoctor: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al editar el doctor, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en editarDoctor: ", e);
        }

        return respuestaJson;
    }

    @POST
    @Path("/diagnostico")
    public String crearDoctorDiagnostico(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.crearDoctorDiagnostico: " + session.getId());

            Logger.getLogger("").info("Entrada crearDoctorDiagnostico: " + entrada);

            AsoDoctorDiagnostico aso = gson.fromJson(entrada, AsoDoctorDiagnostico.class);
            Logger.getLogger("").info("Clase AsoDoctorDiagnostico: " + aso.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Asociación creada correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta crearDoctorDiagnostico: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al crear la asociación, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en crearDoctorDiagnostico", e);
        }

        return respuestaJson;
    }

    @GET
    @Path("/diagnostico")
    public String getDoctoresDiagnosticos(@Context HttpServletRequest req) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        List<Object> objetos = new ArrayList<Object>();
        AsoDoctorDiagnostico obj1 = null;
        AsoDoctorDiagnostico obj2 = null;

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.getDoctoresDiagnosticos: " + session.getId());

            obj1 = new AsoDoctorDiagnostico("1", "1", "Leandro", "Luque", "1", "Diabetes");
            objetos.add(obj1);

            obj2 = new AsoDoctorDiagnostico("2", "2", "Cynthia", "Meza", "2", "Presión Alta");
            objetos.add(obj2);

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(objetos);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getDoctoresDiagnosticos: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al listar las asociaciones.");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getDoctoresDiagnosticos", e);
        }

        return respuestaJson;
    }

    @GET
    @Path("diagnostico/{idDoctorDiagnostico}")
    public String getDoctorDiagnosticoById(@Context HttpServletRequest req, @PathParam("idDoctorDiagnostico") String idDoctorDiagnostico) {
        Respuesta respuesta = new Respuesta();
        AsoDoctorDiagnostico aso1;
        AsoDoctorDiagnostico aso2;
        List<Object> objetos = new ArrayList<Object>();
        Gson gson = new Gson();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.getDoctorDiagnosticoById: " + session.getId());

            Logger.getLogger("").info("Entrada getDoctorDiagnosticoById, idDoctorDiagnostico: " + idDoctorDiagnostico);
            if (idDoctorDiagnostico.equals("1")) {
                aso1 = new AsoDoctorDiagnostico("1", "1", "Leandro", "Luque", "1", "Diabetes");
                objetos.add(aso1);

            } else {
                aso2 = new AsoDoctorDiagnostico("2", "2", "Cynthia", "Meza", "2", "Presión Alta");
                objetos.add(aso2);
            }

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(objetos);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getDoctorDiagnosticoById: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al listar los doctores");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getDoctorDiagnosticoById", e);
        }
        return respuestaJson;
    }

    @PUT
    @Path("diagnostico")
    public String editarDoctorDiagnostico(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, DoctoresResource.editarDoctorDiagnostico: " + session.getId());

            Logger.getLogger("").info("Entrada editarDoctorDiagnostico: " + entrada);

            AsoDoctorDiagnostico aso = gson.fromJson(entrada, AsoDoctorDiagnostico.class);
            Logger.getLogger("").info("Clase AsoDoctorDiagnostico: " + aso.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Asociación editada correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta editarDoctorDiagnostico: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al editar la asociación, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en editarDoctorDiagnostico: ", e);
        }

        return respuestaJson;
    }
}
